有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaBeanio如何将抽象类或接口映射为记录或段

如何使用BeanIO注释定义接口的一段? 在我的示例中,我只能使用@Field信息获取lineResponse,@Segment不可见

ParserWriter结果:

2021051211362850OK Tutto bene

1行的设计结果:

2021051211362850EPPDNY81 D91138414510 20210512 F OK Tutto bene

答复。类,该类包含LineResponse的列表。阶级

@Data
@NoArgsConstructor
@Group(minOccurs=0, maxOccurs= -1, type = Response.class)
public class Response {
    @Record(minOccurs=1, collection = List.class, name="responseLineList", type=LineResponse.class)
    List<LineResponse> responseLines;
}

在下面的类LineResponse中。类,它是一个带有接口的@段

@Data
@NoArgsConstructor
@Record
public class LineResponse implements Serializable {
    
    @Field(ordinal = 1, required = true, length=16, format = "yyyyMMddhhmmssSS")
    Date elaboratedOn;

    @Segment(ordinal =2, name="requestLine", minOccurs = 1, maxOccurs = 1)
    RequestLine line;

    @Field(ordinal = 3, required = true, length=9)
    String errorCode;
    @Field(ordinal = 4, length=36)
    String errorMessage;
}

接口代码:

public interface RequestLine {}

混凝土试车线等级代码:

@Data
@NoArgsConstructor
@Record
public class TestLine implements RequestLine {

    @Field(required = true, length=4, maxLength=4)
    private String recordType; 
    @Field(required = true, length=1, maxLength=1)
    private String messageKO;
    @Field(required = true, length=1, maxLength=1)
    private String messageOK;
    @Field(required = true, length=1, maxLength=1)
    private String divisionCode;
    @Field(required = true, length=13, maxLength=13)
    private Integer progressive; 
    @Field(required = true, length=1, maxLength=1, defaultValue = "D")
    private String prefixItemCode;
    @Field(required = true, length=9, maxLength=9)
    private String itemCode; 
}

混凝土试验线B类代码:

@Data
@NoArgsConstructor
@Record
public class TestLineB implements RequestLine {

    @Field(required = true, length=9, maxLength=9)
    private String itemCode;
    @Field(required = true, length=7, maxLength=7)
    private BigDecimal quantity;
    @Field(required = false, length=1, maxLength=1)
    private String cancellation;
    @Field(required = true, length=3, maxLength=3)
    private String productionLine;
}

这是我使用StreamFactory进行测试的代码

// Filling mock Response with lines
LineResponse lineResponse = new LineResponse();
        lineResponse .setElaboratedOn(new Date());
        lineResponse .setLine(testLine);
        lineResponse .setErrorCode("OK");
        lineResponse .setErrorMessage("Tutto bene");

List<LineResponse> lineResponseList = new ArrayList<>();
        lineResponseList .add(lineResponse );
        
Response response = new Response();
response.setResponseLine(lineResponseList);

Writer writer = new StringWriter();

String writerName = "ResponseFile";
 // create a StreamFactory
            StreamFactory factory = StreamFactory.newInstance();
            factory.define(
                    new StreamBuilder(writerName)
                            .writeOnly()
                            .format("fixedlength")
                            .parser(new FixedLengthParserBuilder())
                            .addGroup(Response.class)
            );

BeanWriter out = factory.createWriter(writerName, writer);
// JAVA to Writer
out.write(response);

共 (0) 个答案